import { reactive, computed } from 'vue'
import { authAPI, userAPI } from '../services/api.js'

// 用户认证状态
const state = reactive({
  user: null,
  isLoggedIn: false,
  token: null
})

// 检查是否为服务重启（通过sessionStorage标记）
const isServiceRestart = () => {
  const sessionKey = 'app_session'
  const currentSession = sessionStorage.getItem(sessionKey)
  const now = Date.now().toString()
  
  if (!currentSession) {
    // 首次访问或服务重启，设置新的session
    sessionStorage.setItem(sessionKey, now)
    return true
  }
  
  // 检查session是否过期（超过30分钟认为是服务重启）
  const sessionTime = parseInt(currentSession)
  const timeDiff = Date.now() - sessionTime
  if (timeDiff > 30 * 60 * 1000) { // 30分钟
    sessionStorage.setItem(sessionKey, now)
    return true
  }
  
  return false
}

// 根据用户角色获取跳转页面
const getRedirectPageByRole = (role) => {
  const rolePageMap = {
    'ADMIN': 'admin',           // 管理员跳转到管理员控制台
    'MAINTENANCE': 'maintenance', // 维修师傅跳转到维修工作台
    'USER': 'dashboard'         // 普通用户跳转到控制面板（原来的首页）
  }
  return rolePageMap[role] || 'dashboard' // 默认跳转到控制面板
}

// 根据后端返回的redirectPath获取前端页面
const getPageFromRedirectPath = (redirectPath) => {
  const pathPageMap = {
    '/admin/dashboard': 'admin',           // 管理员仪表板
    '/maintenance/dashboard': 'maintenance', // 维修师傅仪表板
    '/user/dashboard': 'dashboard'         // 普通用户仪表板
  }
  return pathPageMap[redirectPath] || 'dashboard' // 默认跳转到控制面板
}

// 用户认证管理
export const useAuthStore = () => {
  // 登录
  const login = async (credentials) => {
    try {
      const response = await authAPI.login(credentials)
      if (response.user) {
        state.user = response.user
        state.isLoggedIn = true
        // 这里假设后端返回token，如果没有则使用用户ID作为标识
        state.token = response.token || response.user.id.toString()
        localStorage.setItem('token', state.token)
        localStorage.setItem('user', JSON.stringify(response.user))
        
        // 登录成功后刷新用户信息，获取最新的updated_at等字段
        try {
          console.log('登录成功，开始刷新用户信息...')
          const refreshResult = await refreshUserInfo()
          console.log('用户信息刷新结果:', refreshResult)
        } catch (refreshError) {
          console.warn('登录后刷新用户信息失败:', refreshError)
          // 刷新失败不影响登录流程
        }
        
        // 使用后端返回的redirectPath，如果没有则使用本地逻辑
        const redirectPage = response.redirectPath ? 
          getPageFromRedirectPath(response.redirectPath) : 
          getRedirectPageByRole(response.user.role)
        
        console.log('用户角色:', response.user.role, '后端跳转路径:', response.redirectPath, '前端跳转页面:', redirectPage)
        
        return { 
          success: true, 
          message: response.message,
          redirectPage: redirectPage,
          userRole: response.userRole,
          roleDescription: response.roleDescription
        }
      }
      throw new Error('登录失败')
    } catch (error) {
      return { success: false, message: error.message }
    }
  }

  // 注册
  const register = async (userData) => {
    try {
      const response = await authAPI.register(userData)
      if (response.user) {
        state.user = response.user
        state.isLoggedIn = true
        state.token = response.user.id.toString()
        localStorage.setItem('token', state.token)
        localStorage.setItem('user', JSON.stringify(response.user))
        
        // 使用后端返回的redirectPath，如果没有则使用本地逻辑
        const redirectPage = response.redirectPath ? 
          getPageFromRedirectPath(response.redirectPath) : 
          getRedirectPageByRole(response.user.role)
        
        console.log('注册成功，用户角色:', response.user.role, '后端跳转路径:', response.redirectPath, '前端跳转页面:', redirectPage)
        
        return { 
          success: true, 
          message: response.message,
          redirectPage: redirectPage,
          userRole: response.userRole,
          roleDescription: response.roleDescription
        }
      }
      throw new Error('注册失败')
    } catch (error) {
      return { success: false, message: error.message }
    }
  }

  // 登出
  const logout = () => {
    state.user = null
    state.isLoggedIn = false
    state.token = null
    localStorage.removeItem('token')
    localStorage.removeItem('user')
  }

  // 检查登录状态
  const checkAuth = () => {
    // 如果是服务重启，清除登录状态
    if (isServiceRestart()) {
      console.log('检测到服务重启，清除登录状态')
      logout()
      return false
    }
    
    // 检查localStorage中的登录信息
    const token = localStorage.getItem('token')
    const user = localStorage.getItem('user')
    
    if (token && user) {
      try {
        state.user = JSON.parse(user)
        state.isLoggedIn = true
        state.token = token
        console.log('从localStorage恢复登录状态')
        return true
      } catch (error) {
        console.warn('解析用户信息失败:', error)
        logout()
        return false
      }
    }
    
    console.log('未找到登录信息，需要手动登录')
    return false
  }

  // 更新用户信息
  const updateUserInfo = (updatedUser) => {
    state.user = updatedUser
    localStorage.setItem('user', JSON.stringify(updatedUser))
    console.log('用户信息已更新:', updatedUser)
  }

  // 刷新用户信息（从后端获取最新数据）
  const refreshUserInfo = async () => {
    if (!state.user?.id) {
      console.warn('无法刷新用户信息：用户ID不存在')
      return false
    }
    
    try {
      console.log('开始刷新用户信息，用户ID:', state.user.id)
      const freshUserData = await userAPI.getUser(state.user.id)
      console.log('获取到的用户数据:', freshUserData)
      
      if (freshUserData) {
        // 直接使用后端返回的数据，不手动修改
        state.user = freshUserData
        localStorage.setItem('user', JSON.stringify(freshUserData))
        console.log('用户信息已刷新:', freshUserData)
        return true
      }
    } catch (error) {
      console.error('刷新用户信息失败:', error)
    }
    return false
  }

  // 检查用户名可用性
  const checkUsername = async (username) => {
    try {
      const response = await authAPI.checkUsername(username)
      return response.available
    } catch (error) {
      return false
    }
  }

  // 检查邮箱可用性
  const checkEmail = async (email) => {
    try {
      const response = await authAPI.checkEmail(email)
      return response.available
    } catch (error) {
      return false
    }
  }

  return {
    // 状态
    user: computed(() => state.user),
    isLoggedIn: computed(() => state.isLoggedIn),
    token: computed(() => state.token),
    
    // 方法
    login,
    register,
    logout,
    checkAuth,
    updateUserInfo,
    refreshUserInfo,
    checkUsername,
    checkEmail
  }
}
